package msg

import (
	"encoding/json"
	"gitee.com/ifinder/wechat-ipad-sdk-golang/base"
	"strings"
)

const (
	SyncMsg_Scene_1=1
	SyncMsg_Scene_7=7

	Synckey_1=1
)


// 同步消息参数： Scene填写1,SyncMsgDigest填写1
// 初始化消息： Scene填写7,SyncMsgDigest填写1
type SyncMessageReq struct {
	Scene int `json:"Scene"`
	Synckey string `json:"Synckey"`
	Wxid string `json:"Wxid"`
}

type SyncMessageResp struct {
	base.WechatResponse
	Data SyncMessageData `json:"Data"`
}

func NewSyncMessageResp()  *SyncMessageResp{
	item:=SyncMessageResp{

	}
	return &item
}

type SyncMessageData struct {
	ModUserInfos []interface{} `json:"ModUserInfos"`
	ModContacts []ModContacts `json:"ModContacts"`
	DelContacts []interface{} `json:"DelContacts"`
	UserInfoExts []interface{} `json:"UserInfoExts"`

	AddMsgs []Message `json:"AddMsgs"`

	Status int `json:"Status"`

}

func (this *SyncMessageResp) FromJson(data []byte) error {
	return json.Unmarshal(data,this)
}



const  (
	MessageType_text=1 //1:文本消息
	MessageType_img=3 // 语音
	MessageType_voice=34 //视频
	MessageType_video=43
	MessageType_inventgroup=10002 // 10002: 群邀请
	MessageType_friendapply=37 // 好友申请

)

type Message struct {
	MsgId int64
	FromUserName FromUserName
	ToUserName ToUserName
	MsgType int   // 37 好友验证请求
	Content Content
	Status int
	CreateTime int64
	ImgStatus int
	NewMsgId int64
	MsgSeq int64

	PushContent string   // 社群助理在群聊中@了你",    "社群助理 : @Rose 大哥打个电话的"

}

type Content struct {
	String string `json:"string"`
}

type FromUserName struct {
	String string `json:"string"`
}

type ToUserName struct {
	String string `json:"string"`
}





// 是否群里来的消息
func (this *Message) IsFromChatRoom() bool{
	is_chatromm:=strings.HasSuffix(this.FromUserName.String,"@chatroom")
	if !is_chatromm{
		is_chatromm=strings.HasSuffix(this.ToUserName.String,"@chatroom")
	}
	return is_chatromm
}

/*
群@： "String": "p125463:\n@finder-CTO-吴华龙 也"
普通： "String": "p125463:\nHdh"
 */
func (this *Message) IsAtMsg() bool{
	arr:=strings.Split(this.Content.String,":\n@")
	if len(arr)==2{
		return true
	}
	return false
}

// 来自谁发的消息
// who
func (this *Message) FromUserId() string{
	if this.IsAtMsg(){
		arr:=strings.Split(this.Content.String,":\n@")

		return arr[0]
	}else{
		arr:=strings.Split(this.Content.String,":\n")
		return arr[0]
	}
}

func (this *Message) IsAtMe() bool {
	idx:=strings.Index(this.PushContent,"@了你")
	if idx>=0{
		return true
	}
	return false
}

// 获取 真实消息内容
// 支持 群和私服
func (this *Message) GetWords() string{
	if this.IsAtMsg(){
		arr:=strings.Split(this.Content.String,":\n@")
		str:=arr[1]
		cs:=strings.Split(str," ") //这里不是空格 请注意， 特殊空格分隔

		content:=cs[1]

		return content
	}else{
		arr:=strings.Split(this.Content.String,":\n")
		if len(arr)==1{
			return arr[0]
		}else{
			return arr[1]
		}
	}
}

// 通用的消息解析
// 业务需要根据 msg_type 来转成 对应的业务对象
func (this *Message) Parse() (interface{},error){

	switch this.MsgType {
	case MessageType_text: // 文本消息
		return this.GetWords(),nil

	case MessageType_inventgroup: //群邀请消息

		var groupMsg GroupSysMsg

		group_id:=this.FromUserName.String // group_id
		content:=strings.Replace(this.Content.String,group_id+":","",1)
		err:=groupMsg.FromMsgContent(content)
		return groupMsg,err

	}
	return nil,nil

}



// ========= ModContacts
// 联系人
type ModContacts struct {

	UserName UserName
	NickName NickName

	Sex int

}

type UserName struct {
	String string `json:"string"`
}

type NickName struct {
	String string `json:"string"`
}


